Estoy haciendo uso de Javascript "??" operador para asignar un valor predeterminado cuando la variable no está definida junto con "||" cuando no quiero un valor indefinido o 0.
Por ejemplo, los siguientes preferirán "a" cuando se defina o recurrirán a "b".
Entonces preferiría 1 cuando el valor combinado no estaba definido o 0:
var a, b; console.log((a ?? b) || 1); // prints "1" Sin embargo, el siguiente ajuste presenta un error de compilación.
Espero que imprima "1" o "indefinido" según la precedencia de la operación:
var a, b; console.log(a ?? b || 1); // Uncaught SyntaxError: missing ) after argument list"Por último, esto compila y se ejecuta, pero con la advertencia de que "0" sería un valor aceptado:
var a, b; console.log(a ?? b ?? 1); // prints "1"¿Cuál es el matiz que me estoy perdiendo aquí?
De acuerdo con la documentación , no puede encadenar el operador coalescente nulo con AND u OR:
MDN:
No es posible combinar los operadores AND (&&) y OR (||) directamente con ??. Se lanzará un SyntaxError en tales casos.
null || undefined ?? "foo"; // raises a SyntaxError true || undefined ?? "foo"; // raises a SyntaxErrorSin embargo, proporcionar paréntesis para indicar explícitamente la precedencia es correcto:
(null || undefined) ?? "foo"; // returns "foo"Encontré esta publicación de blog como un recurso útil para pensar por qué.